package pers.corvey.crawler.util;

/**
 * 豆瓣电影API工具类，详情浏览https://developers.douban.com/wiki/?title=movie_v2
 * @author Corvey
 */
public class DoubanMovieAPIUtils {
	private final static String API_PREFIX = "http://api.douban.com/v2/movie/";
	private final static int MAX_COUNT = 100;
	/**
	 * 获取电影信息
	 * @param id 电影id
	 * @return API地址
	 */
	public static String getMovieInfo(String id) {
		return API_PREFIX + "subject/" + id;
	}
	
	/**
	 * 获取演员信息
	 * @param id 演员id
	 * @return API地址
	 */
	public static String getActorInfo(String id) {
		return API_PREFIX + "celebrity/" + id;
	}
	
	/**
	 * 搜索电影（每次最多搜20条）
	 * @param keyword 关键词
	 * @param tag 类型
	 * @param start 起始位置
	 * @return API地址
	 */
	public static String findMovies(String keyword, String tag, Integer start) {
		StringBuilder sb = new StringBuilder();
		addParameter("q", keyword, sb);
		addParameter("tag", tag, sb);
		addParameter("start", start, sb);
		return API_PREFIX + "search" + sb.toString();
	}
	
	/**
	 * 列出TOP250电影（每次最多列出100条）
	 * @param start 起始位置
	 * @return API地址
	 */
	public static String getTop250(Integer start) {
		StringBuilder sb = new StringBuilder();
		addParameter("start", start, sb);
		addParameter("count", MAX_COUNT, sb);
		return API_PREFIX + "top250" + sb.toString();
	}
	
	/**
	 * 列出正在上映的电影（每次最多列出100条）
	 * @param start 起始位置
	 * @param city 城市
	 * @return API地址
	 */
	public static String getInTheaters(String city, Integer start) {
		StringBuilder sb = new StringBuilder();
		addParameter("start", start, sb);
		addParameter("count", MAX_COUNT, sb);
		addParameter("city", city, sb);
		return API_PREFIX + "in_theaters" + sb.toString();
	}
	
	/**
	 * 列出即将上映的电影（每次最多列出100条）
	 * @param start 起始位置
	 * @return API地址
	 */
	public static String getComingSoon(Integer start) {
		StringBuilder sb = new StringBuilder();
		addParameter("start", start, sb);
		addParameter("count", MAX_COUNT, sb);
		return API_PREFIX + "coming_soon" + sb.toString();
	}
	
	/**
	 * 若参数非空则添加
	 * @param name
	 * @param obj 待添加参数
	 * @param builder 添加目标
	 */
	private static void addParameter(String name, Object obj, StringBuilder builder) {
		if (name == null) {
			throw new IllegalArgumentException("参数名不能为空！");
		}
		if (obj != null) {
			builder.append(builder.length() == 0 ? '?' : '&');
			builder.append(name);
			builder.append('=');
			builder.append(obj.toString());
		}
	}

}
